/*
  v8垃圾回收策略
    采用分代回收的思想
    内存分为新生代，老生代
    针对不同对象采用不同算法

  v8内存分配
    v8内存空间一分为二
    小空间用于存储新生代对象（32M|16M）
    新生代指的是村活时间较短的对象（例如：方法内部的变量）

  新生代对象回收实现
    就像刚才看到的from和to。而且这两个部分的大小是等大的，其中会去将这样的一个from空间称之为叫做使用状态。
      然后另外的一个空闲空间，叫做to状态，有了这样的两个空间之后，代码在执行的时候，如果需要去申请空间来进行使用，
      首先，它会将所有的变量对象。都分配至我们的from空间，也就说在这个过程当中，其实to是空闲着没有使用的。一旦当我们
      的from空间应用到一定的程度之后，就要去触发我们的gc操作，所以这个时候，它就会去采用标记整理的操作来对from空
      间进行一个活动对象的标记。找到这样的一些活动对象之后，他继续去使用整理的操作，再去把他们的位置变得连续，也便于
      后续，不会产生碎片化的空间。做完这些操作以后，它会将这样的活动对象拷贝至我们的to空间，拷贝完成以后呢？就意味着
      之前from空间当中的活动对象就有了一个备份。所以这个时候，就可以考虑去做回收操作了，至于说如何去回收，非
      常简单，只需要去把from的空间进行一个完全的释放就可以了。因为from里边的对象，在to里边都有所体现，所以
      这个时候把from直接给它释放掉，不存在任何问题，这个过程也就完成了新生代对象的一个回收操作。在这儿，我们
      简单的总结一下，就是新生代对象的存储区域，其实也被一分为二，而且是两个等大小的，在这两个等大小的空间中，起名
      from和to。当前我们使用的，是from所有的对象声明都会放在这样的一个空间内，然后触发gc机制的时候，就会去把这样的
      一个活动对象全部找到，然后进行整理，然后拷贝到to空间当中。拷贝完成以后，再让这个from和to去进行空间的一
      个交换，原来的to就变成了from而原来的from就变成了to，那这样一来，就算是完成了这样一个空间的释放和回收操作，
      接下来在这里边？还要针对于这样的一个过程，它里边的一些细节呢进行说明。首先，在这个过程当中，肯定会想到的
      一个现象就是，如果在拷贝时发现某一个变量对象所指用的空间？它在当前的老生代对象里边也会出现这个时候，就
      会出现一个所谓的叫晋升的操作，那这里的晋升呢，其实指的就是将新生代的一个对象移动至老年代进行存储。

  老生代对象说明
    老生代对象存放在右侧老生代区域
    64位操作系统1.4G，32操作系统700M
    老生代对象就是指存活时间较长的对象（例如：全局变量，闭包）

  老年代对象回收实现
    主要采用标记清除，标记整理，增量标记算法
    首先使用标记清除完成垃圾空间的回收（主要使用标记清除，虽然有空间碎片化，但是他的运行速度快）
    采用标记整理进行空间优化（新生代移动到老生代过程中，并且老生代空间不足时）
    采用增量标记进行效率优化

  细节对比
    新生代区域立即回收使用空间换时间
    老生代区域垃圾回收不适合复制算法
*/
